<?php
/**
 * 模板消息通知
 *
 * Author: Zeon
 * Date: 2017/7/22
 * Time: 10:00
 * Created by PhpStorm.
 * @test TestTemplateNotice.php
 */
namespace App\Services\OpenWechat;

use App\Exceptions\ApiErrCode;

class TemplateNotice
{
    /**
     * @var \EasyWeChat\OfficialAccount\TemplateMessage\Client
     */
    private $template_message;

    public function __construct(string $appid)
    {
        $app = (new AppFactory())->authorizerApp($appid);

        $this->template_message = $app->template_message;
    }

    /**
     * 直接发送
     * @param $open_id
     * @param $template_id
     * @param $url
     * @param array $data
     * @return array
     *  [
     *  "errcode" => 0,
     *  "errmsg" => "ok",
     *  "msgid" => 428242252,
     * ];
     * @throws \Exception
     */
    public function send($open_id, $template_id, $url, array $data)
    {
        $template_data = [
            'touser'      => $open_id,
            'template_id' => $template_id,
            'url'         => $url,
            'data'        => $data, // 数据总字数限制：200个字符长（不分中英）
        ];

        try{
            $result = $this->template_message->send($template_data);

        } catch (\Exception $e) {
            if (config('app.debug')) throw $e;

            logger(ApiErrCode::LOG_PREFIX. 'wechat openid:'. $open_id .' send notice template error:' . $e->getMessage());

            $result = null;
        }

        return $result;
    }

    /**
     * 发送服务接待通知给店员，点击跳转用户肤质历史数据列表
     * @test
     *
     * @param $open_id
     * @param $url
     * @param array $data
     * @param $template_id
     * @return array
     * @throws \Exception
     */
    public function reserveNotice($open_id, $url, array $data, $template_id)
    {
//        {{first.DATA}}
//        服务类别：{{keyword1.DATA}}
//        处理状态：{{keyword2.DATA}}
//        {{remark.DATA}}
        return $this->send($open_id, $template_id, $url, $data);
    }

    /**
     * 发送抽奖通知 - 微信模板title - 中奖结果通知
     *
     * @test
     *
     * @param $open_id
     * @param $url
     * @param array $data
     * @param $template_id
     * @return array
     * @throws \Exception
     */
    public function lotteryNotice($open_id, $url, array $data, $template_id)
    {
//        {{first.DATA}}
//        活动：{{keyword1.DATA}}
//        奖品：{{keyword2.DATA}}
//        时间：{{keyword3.DATA}}
//        {{remark.DATA}}
        return $this->send($open_id, $template_id, $url, $data);
    }

    /**
     * @param string $openid
     * @param string $template_id
     * @param string $url
     * @param array $data
     *
     * @return array
     * @throws \Exception
     */
    public function skinResultNotice(string $openid, string $template_id,
                                     string $url, array $data)
    {
//        肌肤测试结果通知 - 行业消费品 - 消费品
//        {{first.DATA}}
//        测试人：{{keyword1.DATA}}
//        测试日期：{{keyword2.DATA}}
//        {{remark.DATA}}
        return $this->send($openid, $template_id, $url, $data);
    }
}